// src/utils/http.js
import axios from 'axios'
import { useTokenStore } from '@/stores/token'
import router from '@/router'

// 创建axios实例
// 测试URL：   baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net',
const httpInstance = axios.create({
  // baseURL: 'http://localhost:8080',
  baseURL: '/api',
  timeout: 5000
})

// 项目里面，不同业务模块需要的接口基地址不同，则需创建多个实例、拦截器、请求头、响应头、超时时间、错误处理等配置
// const http01 = axios.create({
//   baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net01',
//   timeout: 5000
// })

// const http02 = axios.create({
//   baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net01',
//   timeout: 5000
// })


// axios请求拦截器
httpInstance.interceptors.request.use(config => {
  // 添加请求头 token
  const tokenStore = useTokenStore()
  // 判断token是否存在
  if (tokenStore.token) {
    config.headers.Authorization = tokenStore.token
  }

  return config
}, e => Promise.reject(e))


// axios响应式拦截器
httpInstance.interceptors.response.use(res => {
  // 操作成功
  if (res.data.code === 0) {
    return res.data
  }
  // 操作失败
  ElMessage.error(res.data.message ? res.data.message : '服务异常')
  // 异常操作状态转换为失败
  return Promise.reject(res.data)
}, e => {
  // 判断响应状态码，如果401，则证明未登录，提示登录，并跳转登录页
  if (e.response && e.response.status === 401) {
    ElMessage.error('请先登录')
    // 跳转到登录页
    router.push('/login')
  }else{
    ElMessage.error('服务异常')
  }
  
  return Promise.reject(e) 
})

export default httpInstance

// 多个实例
// export { http01, http02 }